
// 没有必要顺序的await写法 可以同时并发
; (function () {
    return

    let me = function () {
        return new Promise((resolve, rejects) => {
            setTimeout(() => {
                // console.log('你好啊小朋友'); 
                resolve('你好啊小朋友')
            }, 1000)
        })
    }
    let me2 = function () {
        return new Promise((resolve, rejects) => {
            setTimeout(() => {
                // console.log('你好啊小朋友'); 
                resolve('我不是小朋友')
            }, 2000)
        })
    }
    let one = async function () {
        let a = me()

        let b = me2()
        // await关键字只能在async函数中使用，它用于等待一个Promise对象解析完成
        let one = await a
        let two = await b
        console.log(one, two);


    }
    // .all的处理方式更优雅
    let two = async function () {
        var res = await Promise.all([me(), me2()]);
        console.log(res)
        return "whew all done";

    }
    // one()
    two()



})();

// 循环并发
; (function () {
    // return
    let urls = ['第一', '第二', '第三']
    let me3 = function (str) {
        return new Promise((resolve, rejects) => {
            setTimeout(() => {
                // console.log('你好啊小朋友'); 
                resolve(str)
            }, 2000)
        })
    }
    loadData(urls)
    // 并发二
    // 数组中的map()
    // 不会等待每个异步函数的完成，
    // 而是会立即返回一个包含这些异步函数结果的数组。
    async function loadData(urls) {
        // 并发读取 url
        const textPromises = urls.map( async url => {
            let response = await me3(url);
            if(url=='第三'){
                response = await new Promise((resolve,rejects)=>{
                    setTimeout(()=>{
                        // console.log(this)
                        resolve('我就是第三哦')
                    },3000)
                })
            }
            return response;
        });
        console.log(textPromises)

        // // 按次序输出
        for (const textPromise of textPromises) {
          console.log(await textPromise);
        }
    }
    let num = 0
    console.log(num);
    let flag = setInterval(()=>{
        num ++
        if(num == 6){
            clearInterval(flag)
            return
        }
        console.log(num);
        
        
    },1000)
})();
